from django.shortcuts import render
from rest_framework.generics import CreateAPIView, GenericAPIView, RetrieveAPIView, UpdateAPIView
from rest_framework.permissions import IsAuthenticated
from rest_framework.response import Response
from rest_framework import status
from rest_framework.views import APIView
from .models import User

from . import serializers


# Create your views here.

# 这里的视图使用 GenericAPIView
class UserGenericView(GenericAPIView):
    """
    用户注册
    """
    # 指定序列化器类
    serializer_class = serializers.CreateUserSerializer

    def post(self, request):
        # 创建序列化器
        s = self.get_serializer(data=request.data)
        s.is_valid(raise_exception=True)
        s.save()

        return Response(s.data, status=status.HTTP_201_CREATED)


# 这里的视图使用 GreatePIView
class UserView(CreateAPIView):
    """
    用户注册
    """
    # 指定序列化器类
    serializer_class = serializers.CreateUserSerializer


class UserCountView(APIView):
    """
    判断用户名是否已经注册
    """

    def get(self, request, username):
        # 查询user表
        query = User.objects.filter(username=username)  # 返回查询集
        count = query.count()

        # 包装响应体数据
        data = {
            'username': username,
            'count': count
        }

        return Response(data)


class PhoneCountView(APIView):
    """
    判断手机号码是否已经注册
    """

    def get(self, request, phone):
        # 查询user表
        query = User.objects.filter(phone=phone)  # 返回查询集
        count = query.count()

        # 包装响应体数据
        data = {
            'phone': phone,
            'count': count
        }

        return Response(data)


# 用户中心
# # 路由为： url(r'^user/$', views.UserDetailView.as_view()),
# # 这里视图是详情视图，但是我们写成列表视图，目的是减少向前端响应数据，所以没有pk参数。
class UserDetailView(RetrieveAPIView):
    """提供⽤户详细信息"""
    # 指定序列化器
    serializer_class = serializers.UserDetailSerializer

    # ⽤户身份验证：是否是登录⽤户
    permission_classes = [IsAuthenticated]

    # 由于是列表视图，所以要重写get_object(self)，返回⽤户详情模型对象
    def get_object(self):
        return self.request.user


# # url(r'^email/$', views.EmailView.as_view()),
# # 这里视图是详情视图，但是我们写成列表视图，目的是减少向前端响应数据，所以没有pk参数。
class EmailView(UpdateAPIView):
    """
    更新邮箱
    """
    # 指定序列化器
    serializer_class = serializers.EmailSerializer
    # 验证是否登录
    permission_classes = [IsAuthenticated]

    # 这里写 给邮箱发送邮件的代码
    # 注册码
    # 微信 zrwcirbnzxducfag QQ kdnzhlfjakxibiea
    from django.core.mail import send_mail



    # 重写get_object(self)，返回⽤户详情模型对象
    def get_object(self):
        return self.request.user
